#!/usr/bin/env python3
# _*_ coding: utf-8 _*_

r"""
    软件名称：Dis Gobang
    作者：Else
    微信&QQ：43334634
    邮箱：moonhost@163.com

    目的：
        1.完成毕业设计论文撰写
        2.巩固前期学习知识
        3.熟悉使用VS Code、Git等工具

    感谢：
        感谢网络上学习过的Python教程作者

    目录结构：
        \Module                                 自定义模块目录
        \Module\__init__.py                     自定义模块-主模块
        \Module\Assisted.py                     自定义模块-辅助控制模块
        \Module\Board.py                        自定义模块-棋盘模块
        \Module\Functions.py                    自定义模块-自定义方法模块
        \Module\SocketThread.py                 自定义模块-Socket线程模块
        \Module\Welcome.py                      自定义模块-欢迎窗口模块
        \StaticResources                        资源目录
        \StaticResources\board_bg.png           资源-棋盘背景
        \StaticResources\Piece_bai.png          资源-白子背景
        \StaticResources\Piece_hei.png          资源-黑子背景
        \StaticResources\PlayNow.png            资源-当前落子方
        \DisGobang.py                           程序主入口
        \dist                                   打包生成，执行文件在此
        \build                                  打包生成

    说明：
        1.模块统一放入Module目录、资源统一放入StaticResources目录
        2.自定义模块、类名统一首字母大写
        3.类内部变量统一用双下划线（__）开头，首字母大写
        4.类内部方法统一用双下划线（__）开头，小写
        5.类外部方法统一首字母大写
        6.模块编写说明，说明功能、内部定义类、方法、枚举、下级模块信息
        7.类（含枚举）编写说明，说明类的功能、继承自、内部方法
        8.方法编写说明，说明方法的功能、参数、返回值
        9.代码段根据功能进行划分，编写说明
        10.代码行根据功能进行注释
        11.所有说明使用三个双引号包含（"）

    特别说明：
        练手项目，存在很多不规范的地方，目的和结果已经达到并顺利完成，不求其他，只希望对有需要的人有所帮助。

    模块导入：
        import tkinter                              # 系统模块导入方式
        import Module.Assisted as AC                # 自定义模块导入（带别名设置）方式
        from Module.Functions import Center_Window  # 自定义模块导入方式，导入模块中指定函数（或类）
"""

# 导入相关模块
import tkinter                                  # GUI模块
import Module.Board as BC                       # 自定义：棋盘模块
import Module.Assisted as AC                    # 自定义：辅助控制模块
import Module.Welcome as WC                     # 自定义：欢迎窗口模块
from Module import AppState                     # 自定义：APP状态（枚举）
from Module import AppLocalType                 # 自定义：本机类型（枚举）
from Module.Functions import Center_Window      # 自定义：窗口居中函数
from Module.Functions import Get_Host_IP        # 自定义：获取本机IP函数


# 程序执行主入口
if __name__ == '__main__':

    """
    利用tkinter库的TK类创建主窗体
    """

    # 创建主窗体
    APP = tkinter.Tk()

    """
    定义全局使用变量
    """

    # 当前登录用户昵称
    APP.Nickname = ''
    # 当前主机IP
    APP.LocalIP = Get_Host_IP()
    # 当前主机类型（默认：Default）
    APP.LocalType = AppLocalType.Default
    # 当前主机主机状态（默认：Init）
    APP.AppState = AppState.Init
    # 执黑绑定端口
    APP.BlackPort = 12345  # 执黑绑定此端口
    # 执白绑定端口
    APP.WhitePort = 54321  # 执白绑定此端口
    # 监听线程状态（默认：False）
    APP.ThreadState = False
    # 对弈状态（默认：False）（是否轮到我下子）
    APP.IsPlay = False
    # 对手IP（默认：None）
    APP.OpponentIP = None
    # 对手用户昵称（默认：None）
    APP.OpponentNickname = None
    # 对弈倒计时超时时间 秒
    APP.CountDown = 60

    """
    设置主窗体属性
    """

    # 设置窗体标题
    APP.title('Dis Gobang')
    # 窗体不允许变化大小
    APP.resizable(False, False)
    # 调用自定义函数 屏幕居中 设置窗体高度、宽度以及位置
    Center_Window(APP, 1101, 801)
    # 隐藏主窗体
    APP.withdraw()

    """
    创建主窗体相应的组件
    """

    # 创建棋盘组件
    APP.Board = BC.BoardClass(master=APP)
    # 创建辅助信息组件
    APP.Assisted = AC.AssistedClass(master=APP)

    """
    创建欢迎窗口（负责输入昵称并登录）
    """

    # 创建欢迎窗体 并 显示
    WC.WelcomeClass(APP)

    # 主消息循环
    APP.mainloop()
